# 由于图像保存和重新加载的过程中进行了一些不可避免的数据损失，尤其是在使用JPEG格式保存图片时。JPEG是一种有损压缩方式，会造成一些信息丢失。
# 尽管这种信息丢失在正常观看图片时可能并不明显，但在您的加密/解密过程中可能显现出来，因为每一个像素值都很重要。
# 为了解决这个问题，您可以选择使用无损压缩的图像格式保存您的加密图片，像PNG, BMP或者TIFF。
from PIL import Image
import numpy as np

# 加载输入图片
im = Image.open("test.jpg")

# 将图片转化为numpy数组
im_array = np.array(im)

# 定义一个种子（加密钥匙）
key = 42

# 对图片的每一个像素进行XOR操作（异或操作）
encrypted_array = im_array ^ key

# 保存加密后的图片
# Image.fromarray(encrypted_array).save('encrypted.png')
Image.fromarray(encrypted_array).save("encrypted.png", "PNG")

# 解密
# 加载加密的图片
im_enc = Image.open("encrypted.png")

# 转化为numpy数组
im_enc_array = np.array(im_enc)

# 对图片的每一个像素进行XOR操作（异或操作）
# 应用同样的密钥，因为XOR是自反的
decrypted_array = im_enc_array ^ key

# 保存解密后的图片
Image.fromarray(decrypted_array).save("decrypted.png")
Image.fromarray(decrypted_array).save("decrypted.png", "PNG")
